package ma.myschool.app.webapp.action;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import ma.myschool.app.model.AnneeScolaire;
import ma.myschool.app.model.Classe;
import ma.myschool.app.model.Groupe;
import ma.myschool.app.service.AnneeScolaireManager;
import ma.myschool.app.service.ClasseManager;
import ma.myschool.app.service.GroupeManager;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Component;

@Component("groupeForm")
@Scope("request")
public class GroupeForm extends BasePage implements Serializable {
    
	private GroupeManager groupeManager;
	private AnneeScolaireManager anneeScolaireManager;
	private ClasseManager classeManager;
	
    private Groupe groupe = new Groupe();
    
    private Long id;

    public Groupe getGroupe() {
        return groupe;
    }

    public void setGroupe(Groupe groupe) {
        this.groupe = groupe;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String delete() {
    	try{
	    	id = getParameter("id") != null ? new Long(getParameter("id")) : null;
	        groupeManager.remove(id);
	        addMessage("groupe.deleted");
    	} catch (DataIntegrityViolationException e) {
			addError(getText("errors.use.already"));
		}
    	
        return "success";
    }

    public String edit() {
        // Workaround for not being able to set the id using #{param.id} when using Spring-configured managed-beans
        if (id == null) {
            id = getParameter("id") != null ? new Long(getParameter("id")) : null;
        }
        // Comparison to zero (vs. null) is required with MyFaces 1.2.2, not with previous versions
        if (id != null && id != 0) {
            groupe = groupeManager.get(id);
        } else {
            groupe = new Groupe();
        }

        return "editGroupe";
    }

    public String save() {
        boolean isNew = (groupe.getId() == null || groupe.getId() == 0);
        groupeManager.save(groupe);

        String key = (isNew) ? "groupe.added" : "groupe.updated";
        addMessage(key);

        if (isNew) {
            return "list";
        } else {
            return "edit";
        }
    }
    
    
    @Autowired
    public void setAnneeScolaireManager(@Qualifier("anneeScolaireManager") AnneeScolaireManager anneeScolaireManager) {
        this.anneeScolaireManager = anneeScolaireManager;
    }
    
    @Autowired
    public void setClasseManager(@Qualifier("classeManager") ClasseManager classeManager) {
        this.classeManager = classeManager;
    }
    
    @Autowired
    public void setGroupeManager(@Qualifier("groupeManager") GroupeManager groupeManager) {
        this.groupeManager = groupeManager;
    }
    
    public List<Classe> getClasses(){
    	List<Classe> classes = classeManager.getAll();
    	if(classes != null) 
    		return sort(classes, "nomClasse", true, false);
		else
			return new ArrayList<>();
    }
    
    public List<AnneeScolaire> getAnneeScolaires(){
    	List<AnneeScolaire> anneeScolaires = anneeScolaireManager.getAll();
    	if(anneeScolaires != null) 
    		return sort(anneeScolaires, "anneeScolaire", true, false);
		else
			return new ArrayList<>();
    }
    
} 